gusucode.com > 《MATLAB图像与视频处理实用案例详解》代码 > 《MATLAB图像与视频处理实用案例详解》代码/第 07 章 基于主成分分析的人脸二维码识别/Construct_PCA_DataBase.m

    function Construct_PCA_DataBase()
if exist(fullfile(pwd, '人脸库/model.mat'), 'file')
    return;
end
classNum = 40;
sampleNum = 10;
hw = waitbar(0, '构建PCA数据库进度:', 'Name', 'PCA人脸识别');
rt = 0.1;
waitbar(rt, hw, sprintf('构建PCA数据库进度:%i%%', round(rt*100)));
allsamples = Get_Samples(classNum, sampleNum);
rt = 0.3;
waitbar(rt, hw, sprintf('构建PCA数据库进度:%i%%', round(rt*100)));
samplemean = mean(allsamples);
xmean = Get_StandSample(allsamples, samplemean);
rt = 0.5;
waitbar(rt, hw, sprintf('构建PCA数据库进度:%i%%', round(rt*100)));
sigma = xmean*xmean'; 
[v, d] = eig(sigma);
d1 = diag(d);
rt = 0.7;
waitbar(rt, hw, sprintf('构建PCA数据库进度:%i%%', round(rt*100)));
dsort = flipud(d1);
vsort = fliplr(v);
p = classNum*sampleNum;
base = xmean' * vsort(:,1:p) * diag(dsort(1:p).^(-1/2));
rt = 0.9;
waitbar(rt, hw, sprintf('构建PCA数据库进度:%i%%', round(rt*100)));
save(fullfile(pwd, '人脸库/model.mat'), 'base', 'samplemean');
rt = 1;
waitbar(rt, hw, sprintf('构建PCA数据库进度:%i%%', round(rt*100)));
delete(hw);
msgbox('构建PCA数据库完成!', '提示信息', 'Modal');